﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Client.Encriptacion.logica
{
    class Desescriptacion
    {
        Desescriptacion() { }

        public static BitArray Desencriptar(BitArray entrada, BitArray[] claves)
        {
            //throw new NotImplementedException();
            BitArray[] salida = new BitArray[2];
            BitArray temporal;
            BitArray descifradoFinal = new BitArray(64);
            BitArray permu = Permutar.permutarBien(entrada, Cajas.PermInicial);
            BitArray[] porciones = Dividir.dividir(permu, 2);
            for (int i = 0; i < 16; i++)
            {
                salida = AlgoritmoDES.ProcesoIter(porciones, claves, 15 - i);
                if (i < 15) porciones = salida;
                else
                {
                    temporal = Concatenar.concatenar(salida);
                    //IO.ImprimeBitArray(temporal, 32);
                    //cifradoFinal = Permutar.permutarBien(temporal, Cajas.Permt_Final);
                    porciones = Dividir.dividir(temporal, 2);
                    salida[0] = porciones[1];
                    salida[1] = porciones[0];
                    descifradoFinal = Concatenar.concatenar(salida);
                    temporal = Permutar.permutarBien(descifradoFinal, Cajas.Permt_Final);
                    descifradoFinal = temporal;
                    //IO.ImprimeBitArray(descifradoFinal, 8);
                }
            }
            return descifradoFinal;
        }
    }
}
